using Microsoft.AspNetCore.Mvc;     // 因为ControllerBase等需要引入
using MyWebApi.Api.Entity;      // 因为Users表需要引入
using System.Collections.Generic;   // 因为泛型需要引入
using System.Linq;     // 因为Where 引入之后我们可以使用一种类似SQL的语法来查询任何形式的数据
using System;
using MyWebApi.Api.Repository;
using MyWebApi.Api.ParamModel;
using MyWebApi.Api.Utils;
using Microsoft.Extensions.Configuration;
using Microsoft.AspNetCore.Authorization;


// 
// 分类控制器
// 
namespace MyWebApi.Api.Controllers
{
    // 特性
    // [Authorize]  // [Authorize]下的所有Api接口如：查询、删除、创建用户不能匿名访问，需要Token令牌才可访问
    [ApiController]
    [Route("[controller]")]

    public class ClassifyController : ControllerBase
    {

        // 实例化数据库
        // private MyWebApi.Api.Db.MyWebApiDb db = new Db.MyWebApiDb();

        // 定义为IRepository<T>的泛型接口未知数 T 为 users
        private IRepository<users> _usersRespository;   // 现在_usersRespository里包含IRepository<T>泛型接口里面的属性(可以使用这些属性来进行对Users表的操作)
        private IRepository<classify> _classify;




        private TokenParameter _tokenParameter;
        private readonly IConfiguration _configuration;

        // 一个构造函数：初始化UsersController控制器，使该控制器一开始就有以下的属性
        public ClassifyController(IConfiguration configuration,
         IRepository<users> usersRespository,
         IRepository<classify> classify
         )
        {
            _configuration = configuration;
            _tokenParameter = _configuration.GetSection("tokenParameter").Get<TokenParameter>();

            _usersRespository = usersRespository;
            _classify = classify;
        }


        // 添加一级分类（前端只需要传入一级分类名称）
        [HttpPost]
        public dynamic postClassify(ClassifyModel model)
        {

            // 查看一级分类是否已经存在
            var oneClassify = _classify.Table.Where(x => x.classifyName == model.oneClassify).ToList();
            if (oneClassify.Count() > 0)
            {
                // 一级分类存在
                var res = new
                {
                    Code = 1001,
                    Data = "一级分类存在",
                    Msg = "一级分类存在"
                };

                return JsonHelper.Serialize(res);

            }
            else
            {
                // 一级分类不存在
                var addOneClassify = new classify
                {
                    parnentID = 0,
                    classifyName = model.oneClassify
                };
                _classify.Insert(addOneClassify);

                var res = new
                {
                    Code = 1000,
                    Data = addOneClassify,
                    Msg = "添加一级分类成功"
                };

                return JsonHelper.Serialize(res);
            };

        }


        // 添加二级分类（前端需要传入一级和二级分类名称）
        [HttpPost, Route("addtwoclassify")]
        public dynamic addTwoClassify(ClassifyModel model)
        {

            // 查看一级分类是否已经存在
            var oneClassify = _classify.Table.Where(x => x.classifyName == model.oneClassify).ToList();

            // 查看二级分类是否已经存在
            var twoClassify = _classify.Table.Where(x => x.classifyName == model.twoClassify).ToList();
            if (oneClassify.Count > 0)
            {
                // 一级分类存在

                // 要查询父类Id下的所有子分类是否存在该子分类
                // 查询一级分类id
                var onesClassifyId = _classify.Table.Where(x => x.classifyName == model.oneClassify).ToList()[0].Id;
                // 获取表中父id等于前端传入进来的父分类的id
                var b = _classify.Table.Where(x => x.parnentID == onesClassifyId).ToList();
                // 查询该父分类下的id名称是否有和传入进来的父分类名称相同的
                var againParnent = b.Where(x => x.classifyName == model.twoClassify).ToList();

                if (twoClassify.Count > 0 && againParnent.Count() > 0)
                {
                    // 二级分类存在
                    var res = new
                    {
                        Code = 1001,
                        Data = "二级分类存在，无法添加分类",
                        Msg = "二级分类存在，无法添加分类"
                    };

                    return JsonHelper.Serialize(res);
                }
                else
                {
                    // 二级分类不存在
                    // 查询一级分类id
                    var oneClassifyId = _classify.Table.Where(x => x.classifyName == model.oneClassify).ToList()[0].Id;


                    var addTwoClassify = new classify
                    {
                        parnentID = oneClassifyId,
                        classifyName = model.twoClassify
                    };
                    _classify.Insert(addTwoClassify);

                    var res = new
                    {
                        Code = 1000,
                        Data = addTwoClassify,
                        Msg = "添加二级分类成功"
                    };

                    return JsonHelper.Serialize(res);

                }
            }
            else
            {
                // 一级分类不存在
                var res = new
                {
                    Code = 1001,
                    Data = "一级分类不存在，请先添加一级分类",
                    Msg = "一级分类不存在，请先添加一级分类"
                };

                return JsonHelper.Serialize(res);

            }

        }


        // 添加三级分类（前端需要传入二级和三级分类名称）
        [HttpPost, Route("addThreeclassify")]
        public dynamic addThreeClassify(ClassifyModel model)
        {

            // 查看二级分类是否已经存在
            var twoClassify = _classify.Table.Where(x => x.classifyName == model.twoClassify).ToList();

            // 查看三级分类是否已经存在
            var threeClassify = _classify.Table.Where(x => x.classifyName == model.threeClassify).ToList();

            if (twoClassify.Count > 0)
            {// 二级分类存在


                // 要查询父类Id下的所有子分类是否存在该子分类
                // 查询二级分类id
                var twosClassifyId = _classify.Table.Where(x => x.classifyName == model.twoClassify).ToList()[0].Id;
                // 获取表中父id等于前端传入进来的父分类的id
                var b = _classify.Table.Where(x => x.parnentID == twosClassifyId).ToList();
                // 查询该父分类下的id名称是否有和传入进来的父分类名称相同的
                var againParnent = b.Where(x => x.classifyName == model.threeClassify).ToList();

                if (threeClassify.Count > 0 && againParnent.Count() > 0)
                {
                    // 三级分类存在
                    var res = new
                    {
                        Code = 1001,
                        Data = "三级分类存在，无法添加分类",
                        Msg = "三级分类存在，无法添加分类"
                    };

                    return JsonHelper.Serialize(res);
                }
                else
                {
                    // 三级分类不存在
                    // 查询二级分类id
                    var twoClassifyId = _classify.Table.Where(x => x.classifyName == model.twoClassify).ToList()[0].Id;


                    var addThreeClassify = new classify
                    {
                        parnentID = twoClassifyId,
                        classifyName = model.threeClassify
                    };
                    _classify.Insert(addThreeClassify);

                    var res = new
                    {
                        Code = 1000,
                        Data = addThreeClassify,
                        Msg = "添加三级分类成功"
                    };

                    return JsonHelper.Serialize(res);

                }
            }
            else
            {
                // 二级分类不存在
                var res = new
                {
                    Code = 1001,
                    Data = "二级分类不存在，请先添加二级分类",
                    Msg = "二级分类不存在，请先添加二级分类"
                };

                return JsonHelper.Serialize(res);

            }

        }








































    }
}